#!/usr/bin/env python
# -*-coding:utf-8 -*-

"""
实例方法和静态方法

实例方法只能被实例调用，静态方法（@由staticmethod装饰器的方法）、类方法（由@classmethod装饰器的
方法），可以被类或类的实例对象调用。

1、实例方法，第一个参数必须要默认传递实例对象，一般使用self。
2、静态方法，参数没有必要。
3、类方法，第一个参数必须要默认传递，一般使用cls。

总结：
- 实例方法只能被实例调用
- 静态方法和类方法即可以被类调用也可以被实例调用，区别是静态方法不需要传参数
"""


class Person(object):
    # 构造方法：每个类都有，名称固定为 __init__，声明类时自动执行
    def __init__(self, name):
        self.name = name
        print(f"构造方法执行 {name}")

    # 实例方法
    def instanceMethod(self):
        print("instance method")

    @staticmethod
    def staticMethod():
        print("staic method")

    @classmethod
    def classMethod(cls):
        print("class method")


d = Person("东契奇")
d.instanceMethod()
# Demo.instanceMethod() # 会报错，class 不能直接调用实例方法

Person.staticMethod()
d.staticMethod()
Person.classMethod()
d.classMethod()
